package br.com.controleVendas.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.criterion.Order;

import br.com.controleVendas.entity.ParcelaVenda;
import br.com.controleVendas.entity.ParcelaVendaDto;
import br.com.controleVendas.entity.VendaDto;
import br.com.controleVendas.utils.ReflectionUtils;

public class ParcelaVendaDao extends GenericDao<ParcelaVenda, ParcelaVendaDto>
{
    public List<VendaDto> getListVendaWithParcela(ParcelaVendaDto entity)
        throws Exception
    {
        List<VendaDto> result = new ArrayList<VendaDto>();
        
        entity.setListOrder(new ArrayList<Order>());
        entity.getListOrder().add(Order.asc("venda.nrVenda"));
        entity.getListOrder().add(Order.asc("nrSequencia"));

        VendaDto vendaDto = null;
        for(ParcelaVendaDto parcelaVendaDto : getList(entity))
        {
            if(vendaDto == null || vendaDto.getNrVenda().longValue() != parcelaVendaDto.getVenda().getNrVenda().longValue())
            {
                if(vendaDto != null)
                    result.add(vendaDto);
                vendaDto = (VendaDto) ReflectionUtils.cloneToDto(parcelaVendaDto.getVenda());
                vendaDto.setListParcela(new ArrayList<ParcelaVendaDto>());
            }

            vendaDto.getListParcela().add(parcelaVendaDto);
        }
        
        result.add(vendaDto);

        return result;
    }
    
}
